package main

import "fmt"

//TODO : 线性结构-----线性表的顺序存储(数组)实现

type List *LNode

var MAXSIZE int = 10

type LNode struct {
	Data [MAXSIZE]interface{} //数组Data  LNode.Data[i] 访问数据内容
	Last int                  //最后一个元素位置
}

//TODO : 初始化(初始化一个空线性表)
func MakeEmpty() (list List) {
	list = new(LNode)
	list.Last = -1
	return
}

//TODO : 查找(在线性表V中查找X的第一次出现位置)
func Find(list List, v interface{}) (position int) {
	position = -1
	for i := 0; i <= list.Last; i++ {
		if list.Data[i] == v {
			position = i
			break
		}
	}
	return position
}

//TODO : 插入(在位序k前插入一个新元素v)
func Insert(list List, k int, v interface{}) {
	//todo : 是否需要返回值?
	if list.Last+1 > MAXSIZE {
		fmt.Println("Full")
	}

	if k < 1 || k > list.Last+2 {
		fmt.Println("position k is error")
	}

	for i := list.Last; i > k-1; i-- {
		list.Data[i+1] = list.Data[i]
	}
	list.Data[k-1] = v
	list.Last++
}

//TODO : (删除)删除指定位序k的元素
func Delete(list List, k int) {
	if k < 1 || k > list.Last+1 {
		fmt.Println("position k is error")
	}

	for i := k; i <= list.Last; i++ {
		list.Data[i-1] = list.Data[i]
	}
	list.Last--
}

//TODO : (按序号查找)根据位序K, 返回相应元素 (直接获取) list.Data[k]

//TODO : (求表长)返回线性表L的长度n (直接获取) list.Last+1

